import os
import pandas as pd
import matplotlib.pyplot as plt
os.chdir(r'C:\Users\86183\Desktop')
data=pd.read_csv('数据.csv',engine='python',encoding='gbk')

#查看数据结构,字段含义,缺失情况
data.info()

#去掉单位,并转为float类型
data['总价']=data['总价'].str.replace('万','').astype(float)
data['建筑面积']=data['建筑面积'].str.replace('平米','').astype(float)
data['单价']=data['单价'].str.replace('元/平米','').astype(float)
print(data.head())

#将“3室2厅1卫”类型的字段拆解为三列 室、厅、卫，完成数据结构化
for index in data.index:
    value = data.loc[index, '户型']
    if pd.isna(value) or str(value).strip() == '':
        data.at[index, '户型'] = '0室0厅0卫'
data['室'] = data['户型'].str.extract(r'(\d+)室').fillna(0).astype(int)
data['厅'] = data['户型'].str.extract(r'(\d+)厅').fillna(0).astype(int)
data['卫'] = data['户型'].str.extract(r'(\d+)卫').fillna(0).astype(int)
print(data.head())

#count,均值,最大值
price_count=data.loc[:,'总价'].count()
price_avg=data.loc[:,'总价'].mean()
price_max=data.loc[:,'总价'].max()
print(price_max)
print(price_avg)
print(price_count)

#分析各区域平均总价并排序展示（横向柱状图）
plt.figure(figsize=(10, 6))
average_price = data.groupby('区域')['总价'].mean().sort_values(ascending=True)
average_price.plot.barh(color='skyblue')
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.title('各区域平均总价')
plt.xlabel('平均总价 (万元)')
plt.ylabel('区域')
plt.grid(axis='x', linestyle='--', alpha=0.7) #网格线
plt.tight_layout()  # 自动调整布局
plt.show()

#统计“几室”的户型数量分布并用竖直柱状图
room_distribution=data['室'].value_counts().sort_index()
plt.figure(figsize=(10, 6))
room_distribution.plot.bar(color='salmon')
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.title('“几室”的户型数量分布')
plt.xlabel('户型的数量')
plt.ylabel('数量')
plt.grid(axis='x', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

#用饼图展示装修类型在所有房源中的比例（毛坯/简装/精装）
data_counts = data['装修'].value_counts()
plt.figure(figsize=(8, 8))
plt.pie(
    data_counts,
    labels=data_counts.index,
    autopct='%1.1f%%',
    colors=['#FA8072', '#87CEEB', '#FFD700'],
    textprops={'fontsize': 12}
)
plt.title('装修类型占比', fontsize=16)
plt.tight_layout()
plt.show()

#用散点图表示面积和单价的关系
plt.figure(figsize=(10, 6))
plt.scatter(data['建筑面积'], data['单价'], color='green', alpha=0.6)
plt.title('建筑面积与单价的关系', fontsize=16)
plt.xlabel('建筑面积 (平米)', fontsize=12)
plt.ylabel('单价 (元/平米)', fontsize=12)
plt.grid(linestyle='--', alpha=0.7)  # 添加网格线
plt.tight_layout()
plt.show()


